package com.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class hUnit {
    public static void h(byte[] hash, byte[] message, int mlen, byte flag) throws NoSuchAlgorithmException {
        MessageDigest sha256 = MessageDigest.getInstance("SHA-256");    //256位

        // 处理标志值
        //flag字节用于更新哈希状态
        sha256.update(flag);

        // 处理消息中的每个字节
        //message 数组的前 mlen 个字节被用于更新哈希
        sha256.update(message, 0, mlen);   //确保mlen不超过message的实际长度，以避免抛出异常。

        // 生成最终的哈希值
        byte[] digest = sha256.digest();

        // 将生成的哈希值复制到 hash 数组中
        System.arraycopy(digest, 0, hash, 0, digest.length);
    }


    //打印 hash 数组中的字节，以十六进制格式显示
    public static void strPrint(byte[] hash) {
        // Implement the string print function here
        for (byte b : hash) {
            System.out.printf("%02x", b);
        }
        System.out.println();
    }




    //测试h()方法
     public static void htest() throws NoSuchAlgorithmException {
        byte[] hash = new byte[DataUnit.HASH_LEN];
        byte[] message = {0x04, 0x05, 0x06};

        for (int i = 0; i < 6; i++) {
            h(hash, message, 3, (byte) i);
            strPrint(hash);
        }
    }

    public static void main(String[] args) throws NoSuchAlgorithmException {
            htest();
    }
}
